package com.ruoyi.student.mapper;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.ruoyi.student.domain.StudentInfo;
import com.ruoyi.student.domain.vo.StudentInfoVo;
import com.ruoyi.student.domain.vo.StudentRegVo;
import org.apache.ibatis.annotations.Param;

/**
 * 学生信息管理Mapper接口
 *
 * @author gdslovehy
 * @date 2025-04-24
 */
public interface StudentInfoMapper
{
    /**
     * 查询学生信息管理
     *
     * @param id 学生信息管理主键
     * @return 学生信息管理
     */
    public StudentInfo selectStudentInfoById(String id);

    /**
     * 查询学生信息管理列表
     *
     * @param studentInfo 学生信息管理
     * @return 学生信息管理集合
     */
    public List<StudentInfo> selectStudentInfoList(StudentInfo studentInfo);

    /**
     * 新增学生信息管理
     *
     * @param studentInfo 学生信息管理
     * @return 结果
     */
    public int insertStudentInfo(StudentInfo studentInfo);

    /**
     * 修改学生信息管理
     *
     * @param studentInfo 学生信息管理
     * @return 结果
     */
    public int updateStudentInfo(StudentInfo studentInfo);

    /**
     * 删除学生信息管理
     *
     * @param id 学生信息管理主键
     * @return 结果
     */
    public int deleteStudentInfoById(String id);

    /**
     * 批量删除学生信息管理
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteStudentInfoByIds(String[] ids);

    /**
     * 批量更新学生的培养方案ID
     * @param params 培养方案ID
     * @return 更新记录数
     */
    int updateTrainingProgramForStudents(Map<String, Object> params);
    /**
     * 通过专业ID、学期查询学生信息列表
     */
    // Mapper接口
    List<StudentInfo> selectStudentInfoListByZyAndNj(@Param("studentZy") String studentZy, @Param("studentNj") String studentNj);


    List<StudentInfo> selectStudentInfoListByTrainingProgramId(String trainingProgramIdItem);

    //selectStudentInfoIdListByTrainingProgramId
    List<String> selectStudentInfoIdListByTrainingProgramId(String trainingProgramId);

    public StudentInfo selectStudentInfoListByStudentId(String StudentId);

    void batchUpdateStudentsToClass(@Param("adminClassId") String adminClassId, @Param("studentIds") List<String> studentIds);

    public void deleteAll();

    public int batchInsert(List<StudentInfo> studentList);

    public StudentInfo selectStudentInfoByStudentId(String studentId);
    /**
     * 根据专业(student_zy)和研究方向代码(student_yjfxm)查询学生列表
     * @param studentInfo 包含专业和研究方向代码的查询条件
     * @return 符合条件的学生列表
     */
    List<StudentInfo> selectStudentInfoListByZyAndYjfxm(StudentInfo studentInfo);

   public StudentRegVo getStudentRegVoByStudentId(String studentId);

   public List<StudentInfo> selectStudentInfoByStudentIds(ArrayList<String> strings);

    /**
     * 根据学号更新学生注册状态
     * @param studentInfo 学生信息（含学号和目标状态）
     * @return 影响行数
     */
    int updateStudentZcztByStudentId(StudentInfo studentInfo);

    List<String> selectStudentIdListByTrainingProgramId(String trainingProgramId);

   public StudentInfo selectStudentInfoByStudentXh(String studentId);

    public List<StudentInfo> getAllStudentInfoList(StudentInfo studentInfo);

    public List<StudentInfoVo> selectStudentInfoVoList(StudentInfoVo studentInfoVo);

    List<StudentInfo> selectStudentIdsByCollegeCodes(@Param("collegeCodes") List<String> collegeCodes,@Param("studentInfo")StudentInfo studentInfo);

    String selectStudentCollegeCodesByStudentId(String initiatorId);
}
